// Cell<T> 通过将值移入和移出 Cell 来实现内部可变性。也就是说，永远无法获得内部值的 &mut T
// 如果不用其他东西替换它，就无法直接获得该值本身。这两个规则都确保永远不会有多个引用指向内部值
// #[test]
// fn asdasd() {}

// === NEW IMPLEMENTATION START ===
// CRITICAL: 示例展示了 std::cell::Cell 与 RefCell 的常见用法。
// AUTO_COMMENT: 这些示例安全且无副作用，适合放在库的测试或示例中。
#[allow(dead_code)]
pub fn stdx_examples_cellx() {
    use std::cell::{Cell, RefCell};

    // CRITICAL: Cell 提供按值的内部可变性，适用于 Copy 类型。
    // AUTO_COMMENT: Cell::new 创建一个可变单元格，set/get 用于读写值。
    let c = Cell::new(5);
    c.set(c.get() + 1);
    let val = c.get();

    // CRITICAL: RefCell 提供运行时借用检查，允许在单线程中借用可变引用。
    // AUTO_COMMENT: borrow() 与 borrow_mut() 分别用于不可变与可变借用；借用违规会导致 panic!
    let rc = RefCell::new(vec![1, 2, 3]);
    {
        let mut borrow_mut = rc.borrow_mut();
        borrow_mut.push(4);
    }
    let borrowed = rc.borrow();
    let len = borrowed.len();

    // CRITICAL: 示例展示如何将 RefCell 与 Rc/Arc 结合以便共享可变状态。
    // AUTO_COMMENT: Arc+Mutex 更适合多线程场景；Rc+RefCell 适用于单线程共享可变性。
    use std::rc::Rc;
    let shared: Rc<RefCell<Vec<i32>>> = Rc::new(RefCell::new(vec![10]));
    let s_clone = Rc::clone(&shared);
    s_clone.borrow_mut().push(20);
    let result = shared.borrow().clone();

    // AUTO_COMMENT: 收集变量以避免未使用警告。
    let _ = (val, len, result);
}
// === NEW IMPLEMENTATION END ===
